package org.jpass.dc.view.file;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jpass.dc.common.util.StringUtil;
import org.jpass.dc.view.common.BasicAction;

public class DownloadFileAction extends BasicAction {

	/**
	 * 
	 */
	private static final long serialVersionUID = -7331799738940625220L;
	
	private Log log = LogFactory.getLog(DownloadFileAction.class);

	/* 需要下载文件的路径 */
	private String filePath;

	/* 需要下载的文件名称 */
	private String fileName;

	public String getFilePath() {
		return filePath;
	}

	public void setFilePath(String filePath) {
		this.filePath = filePath;
	}

	public void setFileName(String fileName) {
		this.fileName = fileName;
	}

	/**
	 * @getFileName 此方法对应的是struts.xml文件中的： <param
	 *              name="contentDisposition">attachment
	 *              ;filename="${fileName}"</param> 这个属性设置的是下载工具下载文件时显示的文件名，
	 *              要想正确的显示中文文件名，我们需要对fileName再次编码 否则中文名文件将出现乱码，或无法下载的情况
	 */
	public String getFileName() throws UnsupportedEncodingException {
		String fileNameInCN = fileName;
		try {
			fileNameInCN = new String(fileNameInCN.getBytes(), "ISO-8859-1");
		} catch (UnsupportedEncodingException e) {
			log.error("下载文件\"" + fileName + "\"时转换字符编码出现异常，异常信息为：", e);
		}
		return fileNameInCN;
	}

	/**
	 * @getDownloadFile 此方法对应的是struts.xml文件中的： <param
	 *                  name="inputName">downloadFile
	 *                  </param>返回下载文件的流，可以参看struts2的源码
	 */
	public InputStream getDownloadFile() throws Exception {
		String realPath = this.getUserRealWrokRootPath() + "/" + filePath;
		File file = new File(realPath);
		InputStream is = new FileInputStream(file);
		return is;
	}

	public String execute() {
		if (StringUtil.isBlank(filePath) || StringUtil.isBlank(fileName)) {
			return null;
		}

		String userRealWorkRootPath = this.getUserRealWrokRootPath();
		String srcFilePath = userRealWorkRootPath + "/" + filePath;
		File file = new File(srcFilePath);
		if(file.exists()) {
			if (file.isFile()){
				return SUCCESS;
			} else {
				return null;
			}
		} else {
			return null;
		}
	}
}
